﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LPPA.Facturacion.Services.Logger;
using LPPA.Facturacion.BizEntities;

namespace LPPA.Facturacion.BusinessLayer
{
    public static class MedicionesService
    {
        /// <summary>
        /// Insertar mediciones para un Medidor y Tipo de Corriente.
        /// </summary>
        /// <param name="CodigoMedidor"></param>
        /// <param name="TipoCorriente"></param>
        /// <param name="Consumo"></param>
        /// <returns></returns>
        public static int InsertMediciones(int CodigoMedidor, int TipoCorriente, int Consumo)
        {
            try
            {
                using (DataAccess.dcEdenorteDataContext context = new DataAccess.dcEdenorteDataContext())
                {
                    var medicionToInsert = new DataAccess.Medicione()
                    {
                        Consumo = Consumo,
                        Fecha = DateTime.Now,
                        Medidor = CodigoMedidor,
                        TipoCorriente = TipoCorriente
                    };

                    context.Mediciones.InsertOnSubmit(medicionToInsert);
                    context.SubmitChanges();

                    return medicionToInsert.MedicionID;
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteError("Error al intentar instertar las mediciones de un medidor.", ex.StackTrace);
                throw;
            }
        }

        /// <summary>
        /// Retorna una colleción de mediciones para un medidor determinado.
        /// </summary>
        /// <param name="MedidorId"></param>
        /// <returns></returns>
        public static List<MedicionesBIZ> GetMedicionesByMedidor(int MedidorId)
        {
            try
            {
                List<MedicionesBIZ> listReturn = new List<MedicionesBIZ>();

                using (DataAccess.dcEdenorteDataContext context = new DataAccess.dcEdenorteDataContext())
                {
                    var mediciones = context.Mediciones.Where(x => x.Medidor == MedidorId).OrderByDescending(x => x.Fecha);

                    foreach (var item in mediciones)
                    {
                        listReturn.Add(new MedicionesBIZ() { 
                            MedicionID = item.MedicionID,
                             Consumo = item.Consumo,
                              Fecha = item.Fecha,
                               Medidor = item.Medidor,
                                TipoCorriente = item.TipoCorriente,
                                TipoCorrienteDisplay = (item.TipoCorriente == 1) ? "Reactiva" : "Inductiva"
                                 
                        });
                    }

                    return listReturn;
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteError("Error al intentar instertar las mediciones de un medidor.", ex.StackTrace);
                throw;
            }
        }
    }
}
